
# 阶乘以后的零


# 解法一：计算阶乘后统计零的个数，超时代码
# class Solution:
#     def trailingZeroes(self, n: int) -> int:
#         multi = n
#         while n > 1:
#             multi *= (n - 1)
#             n = n - 1
#         count = 0
#         multi = str(multi)
#         print("multi: ", multi)
#         for i in range(1, len(multi)):
#             if multi[len(multi) - i] == '0':
#                 count += 1
#             else:
#                 break
#
#         return count


# 解法二：思路：要想得到0只能由2*5得到，统计每一个乘数由多少个2和5分解而成，
# 偶数必然可以整除2，因此2的个数远远大于5的个数，因此只需要统计5的个数
# 整除5的数只能是5的倍数，阶乘从最大值到1，整除5的数的商就表示前面有多少个5，
# 比如100的阶乘，前面肯定有20个整除5的数：5，10，15，。。。100
# 但是其中可能有多个5的乘积构成的数，比如25是由两个5相乘得到的（50，75，100）。
# 20//5=4表明有4个数包含两个5的乘积

class Solution:
    def trailingZeroes(self, n: int) -> int:
        count = 0
        while n >= 5:
            n = n // 5
            count += n

        return count


if __name__ == '__main__':
    s = Solution()
    count = s.trailingZeroes(20)
    print("count: ", count)
